home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / perl / 5.10.0 / if.pm < prev    next >
Text File  |  2009-10-01  |  1KB  |  57 lines

  1. package if;
  2.  
  3. $VERSION = '0.05';
  4.  
  5. sub work {
  6.   my $method = shift() ? 'import' : 'unimport';
  7.   die "Too few arguments to `use if' (some code returning an empty list in list context?)"
  8.     unless @_ >= 2;
  9.   return unless shift;        # CONDITION
  10.  
  11.   my $p = $_[0];        # PACKAGE
  12.   (my $file = "$p.pm") =~ s!::!/!g;
  13.   require $file;        # Works even if $_[0] is a keyword (like open)
  14.   my $m = $p->can($method);
  15.   goto &$m if $m;
  16. }
  17.  
  18. sub import   { shift; unshift @_, 1; goto &work }
  19. sub unimport { shift; unshift @_, 0; goto &work }
  20.  
  21. 1;
  22. __END__
  23.  
  24. =head1 NAME
  25.  
  26. if - C<use> a Perl module if a condition holds
  27.  
  28. =head1 SYNOPSIS
  29.  
  30.   use if CONDITION, MODULE => ARGUMENTS;
  31.  
  32. =head1 DESCRIPTION
  33.  
  34. The construct
  35.  
  36.   use if CONDITION, MODULE => ARGUMENTS;
  37.  
  38. has no effect unless C<CONDITION> is true.  In this case the effect is
  39. the same as of
  40.  
  41.   use MODULE ARGUMENTS;
  42.  
  43. Above C<< => >> provides necessary quoting of C<MODULE>.  If not used (e.g.,
  44. no ARGUMENTS to give), you'd better quote C<MODULE> yourselves.
  45.  
  46. =head1 BUGS
  47.  
  48. The current implementation does not allow specification of the
  49. required version of the module.
  50.  
  51. =head1 AUTHOR
  52.  
  53. Ilya Zakharevich L<mailto:perl-module-if@ilyaz.org>.
  54.  
  55. =cut
  56.  
  57.